package indi.wrenn.studentsystem.frame;

import indi.wrenn.studentsystem.bean.User;
import indi.wrenn.studentsystem.dao.ManageHelper;
import indi.wrenn.studentsystem.util.WindowUtil;

import java.awt.Color;
import java.awt.Container;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

/**
 * 学生成绩管理系统登录窗口
 * 提供用户登录和注册功能
 */
public class StudentSystemLoginFrame extends JFrame{

	// 界面组件定义
	private JLabel username_Label;      // "用户名"标签
	private JLabel password_Label;      // "密码"标签
	private JTextField username_Text;   // "用户名"文本框
	private JPasswordField password_Text; // "密码"密码框
	private JButton login_Button;       // "登录"按钮
	private JButton register_Button;    // "注册"按钮
	private JFrame jf;                  // 当前窗口引用

	/**
	 * 构造函数 - 初始化登录界面
	 */
	public StudentSystemLoginFrame(){
		super("学生成绩管理系统登录窗口");
		this.jf = this;
		this.setLayout(null);        // 设置为绝对布局
		this.setSize(400, 300);      // 设置窗口大小

		// 获取内容面板并设置背景色
		Container c = this.getContentPane();
		c.setBackground(Color.WHITE);

		// 初始化用户名标签
		username_Label = new JLabel("用户名:");
		username_Label.setBounds(100, 60, 50, 20);
		c.add(username_Label);

		// 初始化用户名文本框
		username_Text = new JTextField();
		username_Text.setBounds(160, 60, 120, 20);
		username_Text.grabFocus();  // 获取焦点
		c.add(username_Text);

		// 初始化密码标签
		password_Label = new JLabel("密码:");
		password_Label.setBounds(100, 140, 50, 20);
		c.add(password_Label);

		// 初始化密码框
		password_Text = new JPasswordField();
		password_Text.setBounds(160, 140, 120, 20);
		c.add(password_Text);

		// 初始化登录按钮
		login_Button = new JButton("登录");
		login_Button.setBounds(100, 210, 60, 20);

		// 为登录按钮添加事件监听器
		login_Button.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// 获取用户输入的用户名和密码
				String username = username_Text.getText().trim();
				String password = new String(password_Text.getPassword());

				// 数据验证
				if(username.equals("")){
					JOptionPane.showMessageDialog(jf, "用户名不能为空", "", JOptionPane.WARNING_MESSAGE);
					return;
				}
				if(password.equals("")){
					JOptionPane.showMessageDialog(jf, "密码不能为空", "", JOptionPane.WARNING_MESSAGE);
					return;
				}

				// 创建用户对象
				User user = new User();
				user.setUsername(username);
				user.setPassword(password);

				// 创建数据库操作辅助类
				ManageHelper helper = new ManageHelper();

				// 执行登录验证
				if(helper.Login(user)){
					// 检查用户是否已经登录
					if(helper.Check_IsLogin(user)){
						JOptionPane.showMessageDialog(jf, "重复登录", "", JOptionPane.WARNING_MESSAGE);
						return;
					} else {
						// 登录成功
						JOptionPane.showMessageDialog(jf, "登录成功");
						jf.dispose();  // 关闭当前登录窗口

						// 更新用户登录状态
						user.setIsLogin(1);  // 设置为已登录状态
						helper.Update_IsLogin(user);

						// 清空密码并打开主界面
						user.setPassword("");  // 清空密码
						StudentSystemMainFrame frame = new StudentSystemMainFrame(user);
						return;
					}
				} else {
					// 登录失败
					JOptionPane.showMessageDialog(jf, "用户名或密码错误");
					Reset();  // 重置输入框
					return;
				}
			}
		});
		c.add(login_Button);

		// 初始化注册按钮
		register_Button = new JButton("注册");
		register_Button.setBounds(250, 210, 60, 20);

		// 为注册按钮添加事件监听器
		register_Button.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				jf.dispose();  // 关闭当前登录窗口
				// 打开注册窗口
				StudentSystemRegisterFrame studentSystemRegisterFrame = new StudentSystemRegisterFrame();
			}
		});
		c.add(register_Button);

		// 设置窗口属性
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  // 设置关闭操作
		this.setResizable(false);  // 设置窗口不可调整大小
		WindowUtil.setFrameCenter(this);  // 设置窗口居中显示

		// 设置窗口图标
		try {
			Image img = ImageIO.read(this.getClass().getResource("/2.png"));
			this.setIconImage(img);
		} catch (IOException e1) {
			e1.printStackTrace();
		}

		this.setVisible(true);  // 设置窗口可见
	}

	/**
	 * 重置方法 - 清空用户名和密码输入框
	 */
	public void Reset(){
		username_Text.setText("");
		password_Text.setText("");
	}
}